home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 11, No. 08 (1990-08)(MindCraft Publishing)(Side A).zip / Nibble Volume 11, No. 08 (1990-08)(MindCraft Publishing)(Side A).po / VIRT.MEM.DEMO.bas < prev    next >
BASIC Source File  |  1996-12-24  |  6KB  |  122 lines

  1. 10  REM *************************
  2. 20  REM * VIRT.MEM.DEMO         *
  3. 30  REM * BY DR. JOHN R. VOKEY  *
  4. 40  REM * COPYRIGHT(C) 1990     *
  5. 50  REM * MINDCRAFT PUBL. CORP. *
  6. 60  REM * CONCORD, MA 01742     *
  7. 70  REM *************************
  8. 80  GOTO 860
  9. 90  REM ===================
  10. 100  REM   Print Using Sub
  11. 110  REM ===================
  12. 120  IF X = 0  THEN  PRINT "    0.00";: RETURN : REM   For Speed
  13. 130 Q$ = " " + STR$( INT(X *10 ^ND% +.5)):P% =  LEN(Q$) -( VAL(Q$) <0)
  14. 140 X% = FW% -P% *(P% >ND% +1) -(ND% +2) *(P% < = ND% +1)
  15. 150 X$ = "": IF X% >0  THEN  FOR Q = 1 TO X%:X$ = X$ +" ": NEXT 
  16. 160 X$ = X$ + MID$ (Q$,1 +( VAL(Q$) <0),(P% < = ND%) +(P% -ND%) *(P% >ND%)) + MID$ ( MID$ ("0.0000000000",1,ND% +1),1 +((ND% +1) <P%),1 +(ND% -P% +2) *(P% <ND% +2))
  17. 170 X$ = X$ + RIGHT$(Q$,ND% *(P% >ND%) +(P% -1) *(P% < = ND%))
  18. 180  PRINT  RIGHT$(X$,FW%);: RETURN 
  19. 190  REM ==================
  20. 200  REM   Display Matrix
  21. 210  REM ==================
  22. 220  VTAB 19: HTAB 10: PRINT "<One moment, please...>";: VTAB 6: HTAB 9: FOR C = C1 TO C2: PRINT  RIGHT$("     " + STR$(C),6)"  ";: NEXT : PRINT 
  23. 230  VTAB 8: FOR R = R1 TO R2: PRINT  RIGHT$("   " + STR$(R),4)"   I";: FOR C = C1 TO C2:X = X(C,R): GOSUB 120: NEXT : NEXT : GOSUB 710
  24. 240  REM ==================
  25. 250  REM   Highlight Item
  26. 260  REM ==================
  27. 270  VTAB IR -R1 +8: HTAB (IC -C1) *8 +9: INVERSE :X = X(IC,IR): GOSUB 120: NORMAL 
  28. 280  REM =================
  29. 290  REM   Poll Keyboard
  30. 300  REM =================
  31. 310  ON  PEEK( -16384) <128 GOTO 310:K =  PEEK( -16368) -128: ON K = 13 GOTO 350: ON K = 8 GOTO 390: ON K = 21 GOTO 430: ON K = 10 GOTO 470: ON K = 11 GOTO 510: ON K = 113  OR K = 81 GOTO 630: ON K = 71  OR K = 103 GOTO 550: GOTO 310
  32. 320  REM ==============
  33. 330  REM   Return Key
  34. 340  REM ==============
  35. 350  VTAB 19: HTAB 1: INPUT "New value: ";X$: GOSUB 710: ON X$ = "" GOTO 310:X(IC,IR) =  VAL(X$): GOTO 270
  36. 360  REM ==================
  37. 370  REM   Left Arrow Key
  38. 380  REM ==================
  39. 390  ON IC = 0 GOTO 310: GOSUB 670:IC = IC -1: ON IC > = C1 GOTO 270:C1 = C1 -1:C2 = C1 +3: GOTO 220
  40. 400  REM ===================
  41. 410  REM   Right Arrow Key
  42. 420  REM ===================
  43. 430  ON IC = 99 GOTO 310: GOSUB 670:IC = IC +1: ON IC < = C2 GOTO 270:C2 = C2 +1:C1 = C2 -3: GOTO 220
  44. 440  REM =======================
  45. 450  REM   Down Arrow <CTRL-J>
  46. 460  REM =======================
  47. 470  ON IR = 99 GOTO 310: GOSUB 670:IR = IR +1: ON IR < = R2 GOTO 270:R2 = R2 +1:R1 = R1 +1: GOTO 220
  48. 480  REM =====================
  49. 490  REM   Up Arrow <CTRL-K>
  50. 500  REM =====================
  51. 510  ON IR = 0 GOTO 310: GOSUB 670:IR = IR -1: ON IR > = R1 GOTO 270:R1 = R1 -1:R2 = R2 -1: GOTO 220
  52. 520  REM ================
  53. 530  REM   G Key (Goto)
  54. 540  REM ================
  55. 550  VTAB 19: HTAB 1: INPUT "Row: ";R$: GOSUB 710: ON R$ = "" GOTO 310:R =  VAL(R$): ON R <0  OR R >99 GOTO 550
  56. 560  VTAB 19: HTAB 1: PRINT "Row: "R", ";: INPUT "Column: ";C$: GOSUB 710: ON C$ = "" GOTO 550:C =  VAL(C$): ON C <0  OR C >99 GOTO 560
  57. 570 R1 = R: IF R1 >90  THEN R1 = 90
  58. 580 C1 = C: IF C1 >96  THEN C1 = 96
  59. 590 R2 = R1 +9:C2 = C1 +3:IR = R:IC = C: GOTO 220
  60. 600  REM ================
  61. 610  REM   Q Key (Quit)
  62. 620  REM ================
  63. 630  RETURN 
  64. 640  REM ========================
  65. 650  REM   Unhighlight Item Sub
  66. 660  REM ========================
  67. 670  VTAB IR -R1 +8: HTAB (IC -C1) *8 +9:X = X(IC,IR): GOSUB 120: RETURN 
  68. 680  REM =====================
  69. 690  REM   Erase Message Sub
  70. 700  REM =====================
  71. 710  VTAB 19: HTAB 1: CALL  -868: RETURN 
  72. 720  REM ===============
  73. 730  REM   ON ERR Trap
  74. 740  REM ===============
  75. 750 ERR =  PEEK(222): RESUME 
  76. 760  REM ===================
  77. 770  REM   Free Memory Sub
  78. 780  REM ===================
  79. 790 X =  FRE(0): IF X <0  THEN X = X +65536
  80. 800  VTAB 24: HTAB 35: PRINT  RIGHT$("     " + STR$( INT(X/102.4)/10),5);: VTAB 6: RETURN 
  81. 810 :
  82. 820  REM ======================================
  83. 830  REM              Initialize
  84. 840  REM ======================================
  85. 850 :
  86. 860  ONERR  GOTO 750: REM   Set ON ERR Trap
  87. 870  REM   Set 40-Column Text Screen
  88. 880  PRINT  CHR$(14) CHR$(21): TEXT : HOME :D$ =  CHR$(4)
  89. 890 LINE$ = "----------------------------------------"
  90. 900  REM   Draw Main Screen Display
  91. 910  HTAB 12: PRINT "Virtual Memory Demo": HTAB 14: PRINT "by John R. Vokey": PRINT "Copyright (c) 1990 MindCraft Publ. Corp.": PRINT : PRINT LINE$: POKE 34,5
  92. 920  VTAB 23: PRINT LINE$;: POKE 35,22: POKE 2039, ASC("K") +128: GOSUB 790
  93. 930  VTAB 3: HOME 
  94. 940  REM   Get and Set Prefix
  95. 950  PRINT D$"PREFIX": INPUT "";PREFIX$
  96. 960  REM   Attempt to Load and Execute Virtual Memory Patch
  97. 970  IF   NOT ERR  THEN  PRINT D$"-VIRT.MEM.OBJ"
  98. 980  IF ERR  THEN  PRINT "VIRT.MEM.OBJ not found": STOP 
  99. 990  GOSUB 790: REM   Update Current Memory
  100. 1000  REM   Attempt to Create Virtual Array on /RAM disk
  101. 1010  VTAB 19: HTAB 1: PRINT "Creating 50 kilobyte virtual array...":PTH$ = "/RAM/TEST"
  102. 1020  IF   NOT ERR  THEN  &  SAVE PTH$,X(99,99): VTAB 24: PRINT "Path: "PTH$;
  103. 1030  REM   If that fails, try the Prefix disk
  104. 1040  IF ERR  THEN  IF   NOT TRY  THEN PTH$ = PREFIX$ +"TEST":TRY = ERR:ERR = 0: GOTO 1020
  105. 1050  REM   If that fails also, Stop
  106. 1060  IF ERR  THEN  PRINT "Virtual array could not be opened": STOP 
  107. 1070  GOSUB 790: REM   Update Current Memory
  108. 1080  REM   Set up Matrix Display
  109. 1090  HOME : PRINT "  R/C  I": PRINT LINE$;: POKE 34,7: VTAB 18: HTAB 1: PRINT LINE$: VTAB 20: PRINT LINE$;
  110. 1100  VTAB 21: HTAB 9: PRINT "Arrow Keys - Move Cursor": PRINT " G-Goto      <Return>-Change     Q-Quit";
  111. 1110 R1 = 0:R2 = R1 +9:C1 = 0:C2 = C1 +3:FW% = 8:ND% = 2:IR = 0:IC = 0
  112. 1120  REM   CLEAR out some unneeded variables
  113. 1130  &  CLEAR LINE$,TRY: GOSUB 790
  114. 1140  GOSUB 220: REM   Allow user to play with array
  115. 1150  REM ========
  116. 1160  REM   Quit
  117. 1170  REM ========
  118. 1180  REM   Attempt to STORE current block to disk
  119. 1190  VTAB 19: HTAB 1: PRINT "Storing array...";: IF   NOT ERR  THEN  &  STORE X
  120. 1200  IF ERR  THEN  GOSUB 710: VTAB 19: HTAB 1: PRINT "Insert "PTH$" <return>";
  121. 1210  IF ERR  THEN  ON  PEEK( -16384) < >241 GOTO 1210: POKE  -16368,0: GOSUB 710:ERR = 0: GOTO 1190
  122. 1220  TEXT : HOME : END